<template>
  <!-- 导入组件 -->
  <!-- props传递的是function -->
  <upload-excel :before-upload="beforeUpload" :on-success="onSuccess" />
</template>

<script>
import { addEmployeeBatch } from '@/api/employees'
export default {
  data() {
    return {
      // 判断导入数据的类型：如员工导入、考勤导入等
      type: this.$route.query.type // 路由地址通过?type=类型传递参数
    }
  },
  methods: {
    // 上传文件前的处理函数
    beforeUpload(file) {
      // 1.判断上传的文件大小是否是1M
      const isLt1M = file.size / 1024 / 1024 < 1
      if (!isLt1M) {
        this.$message({
          message: '上传的文件大小不能超过1M',
          type: 'warning'
        })
        return false
      }
      // 2.上传的文件类型校验，只允许excel表格
      if (file.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
        this.$message({
          message: '上传的文件必须是excel表格',
          type: 'warning'
        })
        return false
      }
      return true
    },
    // 成功的上传了excel并且转换数据成功后的处理函数
    async onSuccess({ header, results }) {
      if (this.type === 'employee') {
        // 如果是导入员工时excel表格的中文表头和入库时英文字段的对应关系
        const userRelations = {
          入职日期: 'timeOfEntry',
          手机号: 'mobile',
          姓名: 'username',
          转正日期: 'correctionTime',
          工号: 'workNumber'
        }
        // 实际 [{姓名:'张三',手机号码:'16722222222'},{姓名:'李四',手机号码:'17822222222'}]
        // console.log(results)
        // 目标：[{name:'张三',mobile:'16722222222'},{name:'李四',mobile:'17822222222'}]
        // 定义空数组保存处理的数据
        const arr = []
        results.forEach(item => {
          // 空对象保存键值对
          const obj = {}
          Object.keys(item).forEach(key => {
            // 入职时间和转正时间默认被转换成数字了
            if (userRelations[key] === 'timeOfEntry' || userRelations[key] === 'correctionTime') {
              // 入库时需要将数字转换为正常的时间日期对象
              obj[userRelations[key]] = new Date(this.formatDate(item[key], '/'))
            } else {
              obj[userRelations[key]] = item[key]
            }
          })
          arr.push(obj)
        })
        // 判断：上传的数据中的某条数据的电话号码如果已经在数据库中存在，这条数据就不应该添加进数据库，应该排除掉（将来你们在面试过程中问到的开发中的难点）
        // 调接口
        await addEmployeeBatch(arr)
      } else if (this.type === 'attendance') {
        // 考勤
      }
      this.$message.success('批量导入成功')
      // 回跳到原来的页面
      this.$router.back()
    },
    // 将excel表格上传时时间日期转换为数字的数据再转换为正常的时间日期
    formatDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() + ''
      if (format && format.length === 1) {
        return year + format + month + format + date
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>

<style lang="scss" scoped></style>
